package com.zxx.casserver.modules.user.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zxx.casserver.modules.user.entity.UserDO;
import com.zxx.casserver.modules.user.entity.UserRelationVO;
import com.zxx.casserver.modules.user.entity.UserVO;


/**
 * 用户管理-接口层
 *
 * @author zhoukai
 * @date 2020/6/24 17:17
 */
public interface IUserService extends IService<UserDO> {

    /**
     * 根据传入的条件查询用户信息
     *
     * @param userVO 用户相关信息
     * @return 返回查询的用户结果
     * @author zhoukai
     * @date 2020/7/30 15:21
     */
    IPage<UserDO> listUser(UserVO userVO);

    /**
     * 根据传入的用户信息，进行用户保存
     *
     * @param userVO 用户相关信息
     * @return 返回保存的对象
     * @author zhoukai
     * @date 2020/7/30 15:34
     */
    UserDO saveUser(UserVO userVO);

    /**
     * 根据传入的用户信息，修改其改变的用户信息
     *
     * @param userVO 用户相关信息
     * @return 返回更新后的对象
     * @author zhoukai
     * @date 2020/7/30 15:51
     */
    UserDO updateUser(UserVO userVO);

    /**
     * 根据传入的UID删除对应的用户信息
     *
     * @param userVO 用户相关信息
     * @return 成功返回删除的用户对象，失败返回null
     * @author zhoukai
     * @date 2020/7/30 16:09
     */
    UserDO removeUser(UserVO userVO);

    /**
     * 用户登陆 传入用户账户与密码，登陆系统
     *
     * @param userVO 用户相关信息
     * @return 返回登陆成功的用户信息
     */
    UserVO login(UserVO userVO);

    /**
     * 检查用户登陆状态
     *
     * @param userVO 用户相关信息
     * @return 如果登陆则返回登陆成功用户信息，否则返回token失效
     */
    UserVO checkLogin(UserVO userVO);

    /**
     * 用户登出，根据传入的token信息，删除对应redis中的缓存实现登出
     *
     * @param userVO
     * @return 成功true 异常false
     */
    Boolean loginOut(UserVO userVO);

    /**
     * 处理列表显示的附加字段信息
     *
     * @param userPage
     * @return 返回处理之后的用户数据
     */
    IPage<UserVO> dispose(IPage<UserDO> userPage);

    /**
     * 根据传入的参数更新用户密码
     *
     * @param userVO 用户信息
     * @return 返回成功或者失败
     */
    Boolean resetPassword(UserVO userVO);

    /**
     * 根据UID获取用户信息
     *
     * @param userVO 用户实体
     * @return 返回查询的用户信息
     */
    UserVO getUser(UserVO userVO);

    /**
     * 保存用户关系
     *
     * @param userRelationVO
     * @return 返回成功或者失败
     */
    Boolean saveRelation(UserRelationVO userRelationVO);

    /**
     * 保存对应的请求ID和验证码
     * @param requestId 请求ID
     * @param verifyCode 验证码
     */
    void saveVerifyCode(String requestId, String verifyCode);
}
